guint64 content_length;
GCancellable *cancellable;
- GSimpleAsyncResult *result;
+ GTask *task;
} OstreeFetcherPendingURI;
static int
g_clear_object (&pending->self);
g_clear_object (&pending->request);
g_clear_object (&pending->request_body);
+ g_free (pending->out_tmpfile);
g_clear_object (&pending->out_stream);
g_clear_object (&pending->cancellable);
g_free (pending);
OstreeFetcherPendingURI *pending = user_data;
gssize bytes_written;
GError *local_error = NULL;
- GError **error = &local_error;
bytes_written = g_output_stream_splice_finish ((GOutputStream *)object,
result,
- error);
+ &local_error);
if (bytes_written < 0)
goto out;
out:
if (local_error)
- {
- g_simple_async_result_take_error (pending->result, local_error);
- g_simple_async_result_complete (pending->result);
- }
+ g_task_return_error (pending->task, local_error);
}
static void
g_autoptr(GBytes) bytes = NULL;
gsize bytes_read;
GError *local_error = NULL;
- GError **error = &local_error;
- bytes = g_input_stream_read_bytes_finish ((GInputStream*)object, result, error);
+ bytes = g_input_stream_read_bytes_finish ((GInputStream*)object, result, &local_error);
if (!bytes)
goto out;
bytes_read = g_bytes_get_size (bytes);
if (bytes_read == 0)
{
- if (!finish_stream (pending, pending->cancellable, error))
+ if (!finish_stream (pending, pending->cancellable, &local_error))
goto out;
- g_simple_async_result_complete (pending->result);
- g_object_unref (pending->result);
+ g_task_return_pointer (pending->task,
+ g_strdup (pending->out_tmpfile),
+ (GDestroyNotify) g_free);
+ g_object_unref (pending->task);
}
else
{
(bytes_read + pending->current_size) > pending->max_size)
{
g_autofree char *uristr = soup_uri_to_string (pending->uri, FALSE);
- g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED,
- "URI %s exceeded maximum size of %" G_GUINT64_FORMAT " bytes",
- uristr,
- pending->max_size);
+ local_error = g_error_new (G_IO_ERROR, G_IO_ERROR_FAILED,
+ "URI %s exceeded maximum size of %" G_GUINT64_FORMAT " bytes",
+ uristr, pending->max_size);
goto out;
}
}
out:
if (local_error)
{
- g_simple_async_result_take_error (pending->result, local_error);
- g_simple_async_result_complete (pending->result);
- g_object_unref (pending->result);
+ g_task_return_error (pending->task, local_error);
+ g_object_unref (pending->task);
}
}
// We already have the whole file, so just use it.
pending->state = OSTREE_FETCHER_STATE_COMPLETE;
(void) g_input_stream_close (pending->request_body, NULL, NULL);
- g_simple_async_result_complete (pending->result);
- g_object_unref (pending->result);
+ if (pending->is_stream)
+ {
+ g_task_return_pointer (pending->task,
+ g_object_ref (pending->request_body),
+ (GDestroyNotify) g_object_unref);
+ }
+ else
+ {
+ g_task_return_pointer (pending->task,
+ g_strdup (pending->out_tmpfile),
+ (GDestroyNotify) g_free);
+ }
+ g_object_unref (pending->task);
return;
}
else if (!SOUP_STATUS_IS_SUCCESSFUL (msg->status_code))
default:
code = G_IO_ERROR_FAILED;
}
- g_set_error (&local_error, G_IO_ERROR, code,
- "Server returned status %u: %s",
- msg->status_code, soup_status_get_phrase (msg->status_code));
+ local_error = g_error_new (G_IO_ERROR, code,
+ "Server returned status %u: %s",
+ msg->status_code,
+ soup_status_get_phrase (msg->status_code));
goto out;
}
}
}
else
{
- g_simple_async_result_complete (pending->result);
- g_object_unref (pending->result);
+ g_task_return_pointer (pending->task,
+ g_object_ref (pending->request_body),
+ (GDestroyNotify) g_object_unref);
+ g_object_unref (pending->task);
}
out:
{
if (pending->request_body)
(void) g_input_stream_close (pending->request_body, NULL, NULL);
- g_simple_async_result_take_error (pending->result, local_error);
- g_simple_async_result_complete (pending->result);
- g_object_unref (pending->result);
+ g_task_return_error (pending->task, local_error);
+ g_object_unref (pending->task);
}
}
pending->max_size = max_size;
pending->is_stream = is_stream;
pending->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
- pending->result = g_simple_async_result_new ((GObject*) self,
- callback,
- user_data,
- source_tag);
- g_simple_async_result_set_op_res_gpointer (pending->result,
- pending,
- (GDestroyNotify) pending_uri_free);
+ pending->task = g_task_new (self,
+ cancellable,
+ callback, user_data);
+
+ g_task_set_source_tag (pending->task, source_tag);
+ g_task_set_task_data (pending->task, pending, (GDestroyNotify) pending_uri_free);
if (is_stream)
{
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
- OstreeFetcherPendingURI *pending;
-
- g_return_val_if_fail (g_simple_async_result_is_valid (result, (GObject*)self, _ostree_fetcher_request_uri_with_partial_async), FALSE);
+ g_return_val_if_fail (g_task_is_valid (result, self), NULL);
+ g_return_val_if_fail (g_async_result_is_tagged (result,
+ _ostree_fetcher_request_uri_with_partial_async), NULL);
- simple = G_SIMPLE_ASYNC_RESULT (result);
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
- pending = g_simple_async_result_get_op_res_gpointer (simple);
-
- return g_strdup (pending->out_tmpfile);
+ return g_task_propagate_pointer (G_TASK (result), error);
}
static void
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
- OstreeFetcherPendingURI *pending;
-
- g_return_val_if_fail (g_simple_async_result_is_valid (result, (GObject*)self, ostree_fetcher_stream_uri_async), FALSE);
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
- pending = g_simple_async_result_get_op_res_gpointer (simple);
+ g_return_val_if_fail (g_task_is_valid (result, self), NULL);
+ g_return_val_if_fail (g_async_result_is_tagged (result,
+ ostree_fetcher_stream_uri_async), NULL);
- return g_object_ref (pending->request_body);
+ return g_task_propagate_pointer (G_TASK (result), error);
}
guint64